package src.main.java.dao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;

import src.main.java.entity.PedidoDB;


public class PedidoDAO {
	
	private DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
	
	public PedidoDB getPedidoById(Integer id){
		PedidoDB p = null;
		try{
			
			String query = "SELECT id, cliente_cpf, endereco_cep, entrega_codigo, entrega_transportadora, entrega_prazo, " +
					"entrega_frete, total, pagamento_tipo, pagamento_identificador, produtos_codigos, produtos_qtds, dataCriacao" +
					" FROM pedido WHERE id= " + id;
			
			Connection con = getConnection();
			Statement stmt = con.createStatement();
			ResultSet rs = stmt.executeQuery(query);
			
			while(rs.next()){
				p = new PedidoDB();
				
				p.setId(rs.getLong("id"));
				p.setCpf(rs.getLong("cliente_cpf"));
				p.setEndereco_cep(rs.getString("endereco_cep"));
				p.setEntrega_codigo(rs.getInt("entrega_codigo"));
				p.setEntrega_transportadora(rs.getString("entrega_transportadora"));
				p.setEntrega_prazo(rs.getInt("entrega_prazo"));
				p.setEntrega_frete(rs.getInt("entrega_frete"));
				p.setTotal(rs.getDouble("total"));
				p.setPagamento_tipo(rs.getString("pagamento_tipo"));
				p.setPagamento_identificador(rs.getInt("pagamento_identificador"));
				p.setProdutos_codigos(rs.getString("produtos_codigos"));
				p.setProdutos_qtds(rs.getString("produtos_qtds"));
				p.setDataCriacao(rs.getDate("dataCriacao"));

			}
			con.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return p;
	}

	public Long savePedido(PedidoDB p){
		Long id = 0L;
		try{
			String query = "INSERT INTO pedido VALUES(" 
				+ "nextval('sequence_pedido'), "
				+ p.getCpf() + ", " 
				+ "'" + p.getEndereco_cep() + "', "
			    + p.getEntrega_codigo() + ", "
			    + "'" + p.getEntrega_transportadora() + "', "
			    + p.getEntrega_prazo() + ", "
			    + p.getEntrega_frete() + ", "
			    + p.getTotal() + ", "
				+ "to_date('"+df.format(new Date())  + "', 'dd/MM/yyyy'), "
				+ "'" + p.getPagamento_tipo() + "', "
				+ p.getPagamento_identificador() + ", "
				+ "'" + p.getProdutos_codigos() + "', "
				+ "'" + p.getProdutos_qtds() + "') returning id";
				
			Connection con = getConnection();
			Statement stmt = con.createStatement();
			ResultSet rs = stmt.executeQuery(query);
			
			while(rs.next()){
				id = rs.getLong("id");
			}

			System.out.println("Pedido " + id + "salvo com sucesso");

			con.close();
		} catch (Exception e) {
			e.printStackTrace();
			return 0L;
		}
		return id;
	}

	public ArrayList<PedidoDB> listPedidoByCpf(Long cpf){
		ArrayList<PedidoDB> pedidos = new ArrayList<PedidoDB>();
		PedidoDB p = null;
		try{
			
			String query = "SELECT id, cliente_cpf, endereco_cep, entrega_codigo, entrega_transportadora, entrega_prazo, " +
					" entrega_frete, total, pagamento_tipo, pagamento_identificador, produtos_codigos, produtos_qtds, dataCriacao" +
					" FROM pedido WHERE cliente_cpf = " + cpf + ";";
			
			Connection con = getConnection();
			Statement stmt = con.createStatement();
			ResultSet rs = stmt.executeQuery(query);
			
			while(rs.next()){
				p = new PedidoDB();
				
				p.setId(rs.getLong("id"));
				p.setCpf(rs.getLong("cliente_cpf"));
				p.setEndereco_cep(rs.getString("endereco_cep"));
				p.setEntrega_codigo(rs.getInt("entrega_codigo"));
				p.setEntrega_transportadora(rs.getString("entrega_transportadora"));
				p.setEntrega_prazo(rs.getInt("entrega_prazo"));
				p.setEntrega_frete(rs.getInt("entrega_frete"));
				p.setTotal(rs.getDouble("total"));
				p.setPagamento_tipo(rs.getString("pagamento_tipo"));
				p.setPagamento_identificador(rs.getInt("pagamento_identificador"));
				p.setProdutos_codigos(rs.getString("produtos_codigos"));
				p.setProdutos_qtds(rs.getString("produtos_qtds"));
				p.setDataCriacao(rs.getDate("dataCriacao"));
				
				pedidos.add(p);

			}
			con.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return pedidos;
	}
	
	private Connection getConnection() throws Exception {
		Class.forName("org.postgresql.Driver");
		Connection con = DriverManager.getConnection("jdbc:postgresql://localhost:5432/mc437","postgres","postgres");
//		Connection con = DriverManager.getConnection("jdbc:postgresql://staff01.lab.ic.unicamp.br:5432/grupo4","grupo4","ep:eik4Xu5");
		return con;
	}

}